package com.ruoyi.produce.process.planself.service;

import com.ruoyi.produce.process.planoutsource.domain.ProducePlanOutsource;
import com.ruoyi.produce.process.planself.domain.ProducePlanMonthlyProduction;
import com.ruoyi.produce.process.planself.domain.ProducePlanSelfCond;
import com.ruoyi.produce.process.planself.domain.ProducePlanSelfDomain;
import com.ruoyi.produce.process.planself.domain.ProducePlanSelfDto;
import com.ruoyi.produce.process.worksheet.domain.ProduceWorkSheet;
import com.ruoyi.produce.report.produceAnalysis.domain.ProduceAnalysis;

import java.util.List;

/**
 * 自产生产计划
 * 业务层
 */
public interface IProducePlanSelfService {
    /**
     * 查找成品自产生产计划
     * @param cond
     * @return
     */
    List<ProducePlanSelfDto> selectProducePlanSelfListByFinished(ProducePlanSelfCond cond);

    /**
     * 查找未完成成品自产生产计划
     * @param cond
     * @return
     */
    List<ProducePlanSelfDto> selectProcessingProducePlanSelfListByFinished(ProducePlanSelfCond cond);

    /**
     * 根据编号查找自产生产计划
     * @param planSelfId 自产生产计划编号
     * @return
     */
    ProducePlanSelfDto selectProducePlanSelfById(String planSelfId);

    /**
     * 新增自产生产计划
     * @param producePlanSelf
     * @return
     */
    int insertProducePlanSelf(ProducePlanSelfDomain producePlanSelf);

    /**
     * 更新自产生产计划
     * @param producePlanSelf
     * @return
     */
    int updateProducePlanSelf(ProducePlanSelfDomain producePlanSelf);

    /**
     * 删除自产生产计划
     * 仅修改删除标志
     * @param producePlanSelf
     * @return
     */
    int updateProducePlanSelfDeleteFlag(ProducePlanSelfDomain producePlanSelf);

    /**
     * 获取当前编号最大的生产计划
     * @return
     */
    String selectMaxProducePlanSelfId();

    /**
     * 根据生产计划自动批量生成生产报价
     * @param args
     * @return
     */
    int releaseProduceOffer(String[] args);

    /**
     * 生产计划加工单下达
     * @param workSheet
     * @return
     */
    int releaseWorksheet(ProduceWorkSheet workSheet);

    /**
     * 生产计划下达委外加工单
     *
     * @param planOutsource
     * @return
     */
    int releaseProducePlanOutsource(ProducePlanOutsource planOutsource);

    /**
     * 查询月销售产量
     * @return
     */
    List<ProducePlanMonthlyProduction> searchMonthlyProduction();

    /**
     * 查询销售订单进度
     * @param saleOrderId
     * @return
     */
    List<ProduceAnalysis> searchSaleOrderProgress(String saleOrderId);
}
